package com.jacen.etl.services;

import java.io.Serializable;
import java.util.List;

import jodd.util.StringUtil;

import com.jacen.etl.dao.BaseDao;
import com.jacen.etl.util.NHibernateUtil;

/**
 * 公共的service基类
 */
public abstract class BaseService<T extends Serializable>{
	public abstract BaseDao<T> getDao();
	/**
	 * 新增
	 * @param t
	 */
	public void insert(T t){
		getDao().insert(NHibernateUtil.openSession(), t);
	}
	/**
	 * 修改
	 * @param t
	 */
	public void update(T t) {
		getDao().update(NHibernateUtil.openSession(), t);
	}
	/**
	 * 删除
	 * @param t
	 */
	public void delete(T t) {
		getDao().delete(NHibernateUtil.openSession(), t);
	}
	/**
	 * 删除（根据ID）
	 * @param id
	 */
	public void deleteById(String id) {
		getDao().deleteById(NHibernateUtil.openSession(), id);
	}
	/**
	 * 删除（属性值）
	 * @param propertyName
	 * @param propertyValue
	 */
	public int delEntityByKey(String propertyName, Object propertyValue) throws Exception{
		if (StringUtil.isEmpty(propertyName))
			throw new Exception("属性名不能为空");
		if (propertyValue == null)
			throw new Exception("属性值不能为空");
		return getDao().delEntityByKey(NHibernateUtil.openSession(), propertyName, propertyValue);
	}
	/**
	 * 获取（根据ID值）
	 * @param id
	 */
	public T getById(Integer id) {
		return getDao().getById(NHibernateUtil.openSession(), id);
	}
	/**
	 * 获取（根据条件）
	 * @param id
	 */
	public T getEntityByKey(String propertyName, Object propertyValue)
			throws Exception {
		if (StringUtil.isEmpty(propertyName))
			throw new Exception("属性名不能为空");
		if (propertyValue == null)
			throw new Exception("属性值不能为空");
		return getDao().getEntityByKey(NHibernateUtil.openSession(), propertyName, propertyValue);
	}
	/**
	 * 判断实体是否存在（根据属性值）
	 * @param propertyName
	 * @param propertyValue
	 */
	public boolean existEntityByKey(String propertyName, Object propertyValue) throws Exception{
		if (StringUtil.isEmpty(propertyName))
			throw new Exception("属性名不能为空");
		if (propertyValue == null)
			throw new Exception("属性名不能为空");
		return getDao().existEntityByKey(NHibernateUtil.openSession(), propertyName, propertyValue);
	}
	/**
	 * 获取所有实体
	 */
	public List<T> getAll() {
		return getDao().getAll(NHibernateUtil.openSession());
	}
	/**
	 * 查询实体总数
	 */
	public Long getAllCount() {
		return getDao().getAllCount(NHibernateUtil.openSession());
	}
	/**
	 * 判断实体是否存在（根据ID）
	 * @param propertyName
	 * @param propertyValue
	 */
	public boolean existById(String id) {
		return getDao().existById(NHibernateUtil.openSession(), id);
	}
	/**
	 * 删除所有
	 */
	public int delAll() {
		return getDao().delAll(NHibernateUtil.openSession());
	}
	/**
	 * 批量新增
	 * @param entities
	 */
	public void batchInsert(List<T> entities) {
		getDao().batchInsertByHibernate(NHibernateUtil.openSession(), entities);
	}
	/**
	 * 批量修改
	 * @param entities
	 */
	public void batchUpdate(List<T> entities) {
		getDao().batchUpdateByHibernate(NHibernateUtil.openSession(), entities);
	}
}
